#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
手动授权处理脚本
当自动HTTP服务器无法启动时，可以使用此脚本手动处理授权码
"""

import urllib.parse
from outlook_mail_client import OutlookMailClient

def manual_auth_process():
    """
    手动处理OAuth 2.0授权流程
    """
    # 配置参数
    CLIENT_ID = "acf0a6ea-e76d-4550-b031-b9bca70cf07d"
    REDIRECT_URI = "http://localhost:8000"  # 这个URI不会实际使用
    
    # 创建邮件客户端
    client = OutlookMailClient(CLIENT_ID, REDIRECT_URI)
    
    print("=== 手动OAuth 2.0授权流程 ===")
    print("\n当自动服务器无法启动时，请使用此方法：")
    
    # 生成授权URL
    auth_url = client.get_authorization_url()
    print(f"\n1. 请复制以下URL到浏览器中打开：")
    print(f"{auth_url}")
    
    print("\n2. 在浏览器中完成授权后，您会被重定向到一个无法访问的页面")
    print("3. 请复制浏览器地址栏中的完整URL（包含code参数）")
    
    # 获取用户输入的回调URL
    callback_url = input("\n请粘贴完整的回调URL: ").strip()
    
    # 解析授权码
    try:
        parsed_url = urllib.parse.urlparse(callback_url)
        query_params = urllib.parse.parse_qs(parsed_url.query)
        
        if 'code' in query_params:
            auth_code = query_params['code'][0]
            print(f"\n成功提取授权码: {auth_code[:20]}...")
            
            # 设置授权码并获取令牌
            client.auth_code = auth_code
            if client.get_access_token():
                print("\n✅ 认证成功！令牌已保存到配置文件。")
                
                # 测试API调用
                user_info = client.get_user_info()
                if user_info:
                    print(f"\n用户信息:")
                    print(f"姓名: {user_info.get('displayName', '未知')}")
                    print(f"邮箱: {user_info.get('mail') or user_info.get('userPrincipalName')}")
                
                return True
            else:
                print("\n❌ 获取访问令牌失败")
                return False
        else:
            print("\n❌ 未找到授权码，请检查URL是否正确")
            return False
            
    except Exception as e:
        print(f"\n❌ 解析URL时发生错误: {e}")
        return False

def extract_code_from_url(url):
    """
    从回调URL中提取授权码
    
    Args:
        url (str): 完整的回调URL
        
    Returns:
        str: 授权码，如果提取失败返回None
    """
    try:
        parsed_url = urllib.parse.urlparse(url)
        query_params = urllib.parse.parse_qs(parsed_url.query)
        return query_params.get('code', [None])[0]
    except:
        return None

if __name__ == "__main__":
    print("手动授权处理工具")
    print("适用于自动HTTP服务器无法启动的情况")
    print("-" * 50)
    
    # 检查是否提供了URL参数
    import sys
    if len(sys.argv) > 1:
        callback_url = sys.argv[1]
        code = extract_code_from_url(callback_url)
        if code:
            print(f"提取到的授权码: {code}")
        else:
            print("无法从提供的URL中提取授权码")
    else:
        manual_auth_process()